<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2016 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: 流年 <liu21st@gmail.com>
// +----------------------------------------------------------------------
use think\facade\Env;
use think\Db;

if (!function_exists('format_bytes')) {
  function format_bytes($size, $delimiter = '') {
    $units = array('B', 'KB', 'MB', 'GB', 'TB', 'PB');
    for ($i = 0; $size >= 1024 && $i < 5; $i++) $size /= 1024;
    return round($size, 2) . $delimiter . $units[$i];
  }
}
if (!function_exists('curl_get')) {
  /**
   * curl请求(GET)
   * @param string $url 请求地址
   * @param array $data 请求参数
   * @param array $header 设置头部参数
   * @return bool|string 返回结果
   * @author 牧羊人
   * @date 2019/4/5
   */
  function curl_get($url, $data ='',$header = [])
  {
      // 处理get数据
      if (!empty($data)) {
          // $url = $url . '?' . http_build_query($data);
          $url = $url . '?data=' .$data ;
      }
      $curl = curl_init();
      curl_setopt($curl, CURLOPT_URL, $url);
      if (!empty($header)) {
          curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
      }
      // curl_setopt($curl, CURLOPT_HEADER, false);
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
      curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);//这个是重点。
      $result = curl_exec($curl);
      curl_close($curl);
      return $result;
  }
}
// post请求
if (!function_exists('curl_post')) {
  /**
   * curl请求(POST)
   * @param string $url 请求地址
   * @param array $data 请求参数
   * @return bool|string 返回结果
   * @author 牧羊人
   * @date 2019/4/5
   */
  function curl_post($url, $data,$headerArray=[])
  {
      $ch = curl_init();
      if($headerArray){
        $headerArray =array("Content-Type:application/json;charset='utf-8'","Accept:application/json");
      }
      curl_setopt($ch, CURLOPT_POST, 1);
      // curl_setopt($ch, CURLOPT_HEADER, 0);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
      curl_setopt($ch, CURLOPT_URL, $url);
      curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
      curl_setopt($ch, CURLOPT_HTTPHEADER,$headerArray);
      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
      curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,FALSE);
      $result = curl_exec($ch);
      curl_close($ch);
      return $result;
  }
}
if (!function_exists('make_name')) {
  function make_name($length)
  {
  // 密码字符集，可任意添加你需要的字符
  $str = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 
  'i', 'j', 'k', 'l','m', 'n', 'o', 'p', 'q', 'r', 's', 
  't', 'u', 'v', 'w', 'x', 'y','z', 'A', 'B', 'C', 'D', 
  'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L','M', 'N', 'O', 
  'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y','Z', 
  '0', '1', '2', '3', '4', '5', '6', '7', '8', '9');
  // 在 $str 中随机取 $length 个数组元素键名
  $keys = array_rand($str, $length); 
  $password = '';
  for($i = 0; $i < $length; $i++)
  {
    // 将 $length 个数组元素连接成字符串
    $password .= $str[$keys[$i]];
  }
  return $password;
  }
}
function if_user($post){
   // 'idcard'      =>  'array',
    // 'hunyin'      =>  'array',
    // 'height'      =>  'array',
    // 'weight'      =>  'array',
    // 'job'      =>  'array',
    // 'birth'      =>  'array',
    // 'house'      =>  'array',
    // 'nation'      =>  'array',
    // 'wages'      =>  'array',
    // 'car'      =>  'array',
    // 'area'      =>  'array',
    // 'xingzuo'      =>  'array',
    // 'shengxiao'      =>  'array',
    // 'xuexing'      =>  'array',
    // 'jiguan'      =>  'array',
    // 'shape'      =>  'array',
    // 'yinshi'      =>  'array',
    // 'smoke'      =>  'array',
    // 'drink'      =>  'array',
    // 'xueli'      =>  'array',
    // 'show'         =>'array',
    if(!is_empty($post['xueli'])){
      $xueli=json_decode($post['xueli'],true);
      if($xueli['data']['0']=='请选择'){
        $xueli['data']['0']=[];
      }
      $post['xueli']=json_encode($xueli,320);
    }
return $post;
}
if (!function_exists('getDistance_m')) {
  # 计算两点之间距离
  function getDistance_m($lat1, $lng1, $lat2, $lng2)
  {
      $radLat1 = deg2rad(floatval($lat1));// deg2rad()函数将角度转换为弧度
      $radLat2 = deg2rad(floatval($lat2));
      $radLng1 = deg2rad(floatval($lng1));
      $radLng2 = deg2rad(floatval($lng2));
      $a = $radLat1 - $radLat2;
      $b = $radLng1 - $radLng2;
      $s = 2 * asin(sqrt(pow(sin($a / 2), 2) + cos($radLat1) * cos($radLat2) * pow(sin($b / 2), 2))) * 6378.137;
      // return round($s * 1000, 2);
      if ($s * 1000 < 1000) {
          return round($s * 1000, 2) . "m";
      } else {
          return round($s, 2) . "km";
      }
  }
}
// 图片监黄接口
if (!function_exists('img_censor')) {
  function img_censor(){
    $token = '[调用鉴权接口获取的token]';
    $url = 'https://aip.baidubce.com/rest/2.0/solution/v1/img_censor/v2/user_defined?access_token=' . $token;
    $img = file_get_contents('[本地文件路径]');
    $img = base64_encode($img);
    $bodys = array(
        'image' => $img
    );
    $res = curl_post($url, $bodys);
    var_dump($res);
  }
}


// 应用公共文件
if (!function_exists('get_month')) {
    //本年所有月份        开始和结束
    function get_month(){
      $year = date('Y');
      $yeararr = [];
      $month = [];
      for ($i=1; $i <=12 ; $i++) {
          $yeararr[$i] = $year.'-'.$i;
      }
      foreach ($yeararr as $key => $value) {
          $timestamp = strtotime( $value );
          $start_time = date( 'Y-m-1 00:00:00', $timestamp );
          $mdays = date( 't', $timestamp );
          $end_time = date( 'Y-m-' . $mdays . ' 23:59:59', $timestamp );
          $time = date( 'Y-m-1', $timestamp );
    
          $month[$key]['start_time'] = $start_time;
          $month[$key]['end_time'] = $end_time;
          $month[$key]['time'] = $key.'月';
      }
      return $month;
    }
}
// 请求返回
if (!function_exists('message')) {
    /**
     * 消息数组函数
     * @param string $msg 提示语
     * @param bool $success 是否成功
     * @param array $data 结果数据
     * @param int $code 错误码
     * @return array 返回消息对象
     * @author 牧羊人
     * @date 2020/7/1
     */
    function message($msg = "操作成功", $success = true, $data = [], $code = 200)
    {
        // $data=json_encode($data);
        $result = ['msg' => $msg, 'data' => $data, 'success' => $success];
        if ($success) {
            // 成功统一返回200
            $result['code'] = 200;
        } else {
            // 失败状态(可配置常用状态码)
            $result['code'] =-1;
        }
        return $result;
    }
  }
  // 请求返回json
  if (!function_exists('home_message')) {
    /**
     * 消息数组函数
     * @param string $msg 提示语
     * @param bool $success 是否成功
     * @param array $data 结果数据
     * @param int $code 错误码
     * @return array 返回消息对象
     * @author 牧羊人
     * @date 2020/7/1
     */
    function home_message($msg = "操作成功", $success = true, $data = [], $code = 200)
    {
        // $data=json_encode($data);
        $result = ['msg' => $msg, 'data' => $data, 'success' => $success];
        if ($success) {
            // 成功统一返回200
            $result['code'] = 200;
        } else {
            // 失败状态(可配置常用状态码)
            $result['code'] =-1;
        }
        return json_encode($result,320);
    }
  }
  // 树结构
  if (!function_exists('make_tree')) {
    function make_tree($list,$pk='rule_id',$pid='pid',$child='zi',$root=0){
        $tree=array();
        $packData=array();
        foreach ($list as $data) {
          $packData[$data[$pk]] = $data;
        }
        foreach ($packData as $key =>$val){
          if($val[$pid]==$root){//代表跟节点
            $tree[]=& $packData[$key];
          }else{
            //找到其父类
            $packData[$val[$pid]][$child][]=& $packData[$key];
          }
        }
        return $tree;
      }
    }
    // 当前ip地址
if (!function_exists('get_real_ip')) {
    //获取ip地址
      function get_real_ip(){
        $ip=false;
        if(!empty($_SERVER["REMOTE_ADDR"])){
          $ip = $_SERVER["REMOTE_ADDR"];
        }
        if (!empty($_SERVER['HTTP_X_FORWARDED_FOR']) && !$ip){
          $ips = explode (", ", $_SERVER['HTTP_X_FORWARDED_FOR']);
          if($ip){
              array_unshift($ips, $ip); 
              $ip = false; 
          }
          for($i = 0; $i < count($ips); $i++){
              if (!preg_match ("/^(10|172.16|192.168).$/", $ips[$i])){
                $ip = $ips[$i];
                break;
              }
          }
        }

        return ($ip ? $ip : $_SERVER['HTTP_CLIENT_IP']);
      }
}
// 上传图片
    if (!function_exists('upload_img')) {
      /**
     * 图片转缩略图，加水印，存在本地
     * @param $file 文件
     * @param $text 水印内容Call to a member function validate() on string
     * @return mixed
     * @throws BaseException
     */
    function upload_img($file) {
      $return=[];
        // 获取表单上传文件 例如上传了001.jpg
        // $file = request()->file('image');
        // 移动到框架应用根目录/public/uploads/ 目录下
        if($file){
            // $info = $file->move(ROOT_PATH . 'public' . DS . 'uploads'.DS.'admin');
            $info = $file->move(ROOT_PATH . 'public' . DS . 'uploads'.DS.'file_img');
            if($info){
              $filename='uploads/file_img/'.str_replace('\\','/',$info->getSaveName());
              $img=new \Img($filename);
              if($img->getimg($filename,300)){
                $da['msg']='上传成功';
                // 成功上传后 获取上传信息
                $return['code']=0;
                $return['data']='/uploads/file_img/'.str_replace('\\','/',$info->getSaveName());
              }else{
                $da['msg']='上传失败';
                $da['data']='上传压缩失败';
                $da['code']=1;
              }
                
            }else{
                // 上传失败获取错误信息
                $return['code']=1;
                // $return['msg']="上传成功";
                $return['msg']="上传失败";
                $return['data']=$file->getError();
            }
        }
        return json_encode($return);
  }

}
// 鉴黄上传图片.
if (!function_exists('api_upload_img')) {
  /**
 * 图片转缩略图，加水印，存在本地
 * @param $file 文件
 * @param $text 水印内容Call to a member function validate() on string
 * @return mixed
 * @throws BaseException
 */
function api_upload_img($name) {
  $return=[];
  $file=request()->file($name);
  // 获取表单上传文件 例如上传了001.jpg
  // 微信地址
  $xt=Db::table('config')->find(1);
  $appId = $xt['appid'];
  $appSecret =$xt['appsecret'];
  $url='https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appId.'&secret='.$appSecret;
  // 请求头数据类型设置
  $headerArray =array("Content-type:application/x-www-form-urlencoded;","Accept:application/json");
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  $output = curl_exec($ch);
  curl_close($ch);
  $output =substr($output,17,157);
  if($output){
      $path = $_FILES[$name]['tmp_name'];
      
      $url = "https://api.weixin.qq.com/wxa/img_sec_check?access_token=".$output;
      $file_data = array("media" => new \CURLFile($path,$_FILES[$name]['type']));
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, $url);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
      curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
      curl_setopt($ch, CURLOPT_POST, 1);
      curl_setopt($ch, CURLOPT_POSTFIELDS, $file_data);
      $output = curl_exec($ch); //发送请求获取结果
      curl_close($ch); //关闭会话
      $err = json_decode($output,true);
      dump($file_data);
      dump($output);die;
      $code = $err['errcode'];
      if($code == 0){
        $file=request()->file($file);
          // 图片存储的路径，请根据自己的路径进行更改
          if($file){
            // $info = $file->move(ROOT_PATH . 'public' . DS . 'uploads'.DS.'admin');
            $info = $file->move(ROOT_PATH . 'public' . DS . 'uploads'.DS.'file_img');
            if($info){
              $filename='uploads/file_img/'.str_replace('\\','/',$info->getSaveName());
              $img=new \Img($filename);
              if($img->getimg($filename,300)){
                $da['msg']='上传成功';
                // 成功上传后 获取上传信息
                $return['code']=0;
                $return['data']='/uploads/file_img/'.str_replace('\\','/',$info->getSaveName());
              }else{
                $da['msg']='上传失败';
                $da['data']='上传压缩失败';
                $da['code']=1;
              }
                
            }else{
                // 上传失败获取错误信息
                $return['code']=1;
                // $return['msg']="上传成功";
                $return['msg']="上传失败";
                $return['data']=$file->getError();
            }
        }
        return json_encode($return);
      }else{
          return json_encode(array("code" => $code, 'msg' => $err['errmsg']));
      }
  }else{
      return  json(['code' => "0",'msg'=>"微信接口访问失败"]);
  }
    
}

}
// 这是给图片加网站名
function url_img($img){
  $domin=request()->domain();
  if(!strstr($img,$domin)){
      $domin=request()->domain();
      $img=$domin.$img;
  }
  return $img;
}
// 这是给富文本里面的图片加文字
function url_content_img($text){
  if(strstr($text,"<img src=")){
      $domin=request()->domain();
      $src='<img style="max-width:100%;" src="'.$domin;
      $text=str_replace('<img src="',$src,$text);
  }
  return $text;
}
// 删除目录
if (!function_exists('file_dels')) {
  function file_dels($path,$paths_t=''){
    if($path){
        $paths = str_replace('\\','/', ROOT_PATH.'public'.$path);
        // dump($paths);
        if (file_exists($paths)) {
          if (is_file($paths)) {
            @unlink($paths);//删除
          }
        }
        //如果这个文件的目录为空就删除改目录
        if (is_dir($paths_t)) {
          $a = array_diff(scandir($paths_t), array('..', '.'));
          if (empty($a)) {
              @rmdir($paths_t);
          }
      }
    return true;
    }
    return false;
  }
}
// 获取订单号
if (!function_exists('get_order_num')) {

  /**
   * 生成订单号
   * @param string $prefix 订单前缀(如：JD-)
   * @return string 输出订单号字符串
   * @author 牧羊人
   * @date 2019/4/5
   */
  function get_order_num($prefix = '')
  {
      $micro = substr(microtime(), 2, 3);
      return $prefix . $micro .  rand(100000, 999999);
  }

}
if (!function_exists('is_empty')) {

  /**
   * 判断是否为空
   * @param $value 参数值
   * @return bool 返回结果true或false
   * @author 牧羊人
   * @date 2019/4/5
   */
  function is_empty($value)
  {
      // 判断是否存在该值
      if (!isset($value)) {
          return true;
      }
      // 判断是否为empty
      if (empty($value)) {
          return true;
      }
      // 判断是否为null
      if ($value === null) {
          return true;
      }
      // 判断是否为空字符串
      if (trim($value) === '') {
          return true;
      }
      if (trim($value) === 'null') {
        return true;
    }
    if (!$value) {
      return true;
  }
      // 默认返回false
      return false;
  }
}
if (!function_exists('saveTime')) {
  function saveTime($time)
  {
      $rtime = date("Y-m-d H:i", $time);
      $time = time() - $time;
      if ($time < 60) {
          $str = '刚刚';
      } elseif ($time < 60 * 60) {
          $min = floor($time / 60);
          $str = $min . '分钟前';
      } elseif ($time < 60 * 60 * 24) {
          $h = floor($time / (60 * 60));
          $str = $h . '小时前 ';
      } elseif ($time < 60 * 60 * 24 * 3) {
          $d = floor($time / (60 * 60 * 24));
          if ($d == 1) {
              $str = '昨天 ';
          } else {
              $str = '前天 ';
          }
      } else {
          $str = $rtime;
      }
      return $str;
  }
}
if (!function_exists('gettime')) {
function gettime($worktime){
  $time=time();
  $amount=date("Y",$time)-date("Y",strtotime($worktime));
  if (date("m",$time)<date("m",strtotime($worktime))) {
  $amount--;
  }
  elseif (date("m",$time)==date("m",strtotime($worktime))) {
  if (date("d",$time)<date("d",strtotime($worktime))) {
  $amount--;
  }
  }
  return $amount;
  }
}
if (!function_exists('img_dels')) {
  function img_dels($path){
    if($path){
      $imgs=explode(',',$path);
      foreach($imgs as $k=>$v){
        $paths = ROOT_PATH.'public'.DIRECTORY_SEPARATOR.$v;
        if (file_exists($paths)) {
            @unlink($paths);//删除
        }
      }
    }
   
    return true;
  }
}
function encrypt($input, $key)
{
    $data = openssl_encrypt($input, 'AES-128-ECB', $key, OPENSSL_RAW_DATA);
    $data = base64_encode($data);
    return $data;
}
/**
 * [decrypt aes解密]
 * @param    [type]                   $sStr [要解密的数据]
 * @param    [type]                   $sKey [加密key]
 * @return   [type]                         [解密后的数据]
 */
  function decrypt($sStr, $sKey)
{
    $decrypted = openssl_decrypt(base64_decode($sStr), 'AES-128-ECB', $sKey, OPENSSL_RAW_DATA);
    return $decrypted;
}
/*
* 合并图片
* @ $bg_img 背景图片
* @ $qrcode_img 二维码图片
* @ $new_filename 新文件名
* @ $is_suoxiao 组合的图片是否缩小
* @ $n_w 缩小的宽
* @ $n_h 缩小的高
* @ $is_per 是否按比例缩小
* @ $text 文字
* @ $s_width 要组合的图片在x轴的位置
* @ $s_height 要组合的图片在y轴的位置
*/
function composite_picture($bg_img, $qrcode_img, $new_filename, $is_suoxiao, $n_w='130', $n_h='130', $is_per=false, $text='', $s_width='0', $s_height='0'){
  if($is_suoxiao){
      $src_im = imgsuoxiao($qrcode_img, $n_w, $n_h, $is_per);
  }else{
      $src_im = $qrcode_img;
  }
  // return dump($src_im);
  $bgimg = imagecreatefromstring(file_get_contents($bg_img));//背景图
  $src = imagecreatefromstring(file_get_contents($src_im));//组合图
  list($src_w, $src_h) = getimagesize($src_im);

  imagecopy($bgimg, $src, $s_width, $s_height, 0, 0, $src_w, $src_h);

  list($bgimg_w, $bgimg_h, $bgimg_type) = getimagesize($bg_img);

  switch ($bgimg_type) {
      case 1://GIF
          header('Content-Type: image/gif');
          header('Content-Disposition: inline; filename="image.gif"');
          $result = imagegif($bgimg, $new_filename);
          break;
      case 2://JPG
          header('Content-Type: image/jpeg');
          header('Content-Disposition: inline; filename="image.jpg"');
          
          imagejpeg($bgimg, $new_filename);
          break;
      case 3://PNG
          header('Content-Type: image/png');
          header('Content-Disposition: inline; filename="image.png"');
          imagepng($bgimg, $new_filename);
          break;
      default:
          break;
  }
  imagedestroy($bgimg);
  imagedestroy($src);
  if($text){
      $newss = numimage($text,$new_filename,18,3,70,850);
      return $newss;
  }else{
      return $new_filename;
  }
  
  return $new_filename;
  // exit;
}

//缩小图片
function imgsuoxiao($filename, $n_w, $n_h, $is_per=false){
  // iconv('utf-8', 'gbk', $filename);
  // dump($filename);die;
  list($width, $height, $dst_type)=getimagesize($filename);
  // dump($n_w);
  // dump($n_h);
  if($is_per){
      $per=0.3;
      $n_w=$width*$per;
      $n_h=$height*$per;
  }
  switch ($dst_type) {
      case 2://JPG
          $img=imagecreatefromjpeg($filename);
          break;
      case 3://PNG
          $img = imagecreatefrompng($filename);
          break;
      default:
          break;
  }
//     dump($n_w);
//     dump($n_h);
// die;
  $new=imagecreatetruecolor($n_w, $n_h);
  //copy部分图像并调整
  imagecopyresized($new, $img,0, 0,0, 0,$n_w, $n_h, $width, $height);
  //图像输出新图片、另存为
  imagejpeg($new, $filename);
  imagedestroy($new);
  imagedestroy($img);
  return $filename;
}


/**
* 像图片中添加文字
* @param $txt 文本文字
* @param $image 图片路径
* @param $size  文字大小
* @param $scale 文字旋转度
* @param $x 在x轴上的位置
* @param $y 在y轴上的位置
* @param $color 字体颜色
*/
function numimage($txt,$image,$size,$scale,$x,$y, $color="白色")
{
  list($dst_w, $dst_h, $dst_type) = getimagesize($image);
  switch ($dst_type) {
      case 2://JPG
          $im = imagecreatefromjpeg($image);
          break;
      case 3://PNG
          $im = imagecreatefrompng($image);
          break;
      default:
          break;
  }
  $textcolor = imagecolorallocate($im, 0, 0, 0);
  if($color=="白色"){
      $textcolor = imagecolorallocate($im, 255, 255, 255);
  }
  $qr_size = imagesx($im);
  $font = realpath($_SERVER['DOCUMENT_ROOT'].'/static/admin/75.ttf'); //引入字体
  imagettftext($im, $size,0,$x,$y, $textcolor, $font, $txt);
  $myImage = ImageCreate(245,245); //参数为宽度和高度
  imagecopyresampled($myImage, $im, 0, 0, 0, 0, 0, 80, 10, 10); //重新组合图片并调整大小
  header("Content-type: image/jpeg");
  imagejpeg($im, $image);
  imagedestroy($im);
  return $image;
}
if (!function_exists('make_password')) {
  function make_password( $length = 18 )
  {
      // 密码字符集，可任意添加你需要的字符
      $chars = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 
      'i', 'j', 'k', 'l','m', 'n', 'o', 'p', 'q', 'r', 's', 
      't', 'u', 'v', 'w', 'x', 'y','z', 'A', 'B', 'C', 'D', 
      'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L','M', 'N', 'O', 
      'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y','Z', 
      '0', '1', '2', '3', '4', '5', '6', '7', '8', '9');
      // 在 $chars 中随机取 $length 个数组元素键名
      $keys = array_rand($chars, $length); 
      $password = '';
      for($i = 0; $i < $length; $i++)
      {
          // 将 $length 个数组元素连接成字符串
          $password .= $chars[$keys[$i]];
      }
      if(Db::name('order')->where(['tg_daima'=>$password])->find()){
        make_password();
      }else{
        return $password;
      }
  }
}
if (!function_exists('opt_photo')){
    //图库选择
    function opt_photo($val)
    {
       return '<button class="pear-btn pear-btn-primary pear-btn-sm" style="margin:4px 5px;vertical-align:top;" id="'.$val.'" type="button">图库选择</button>
       <script>
       layui.use(["jquery"],function() {
        let $ = layui.jquery;
        //弹出窗设置 自己设置弹出百分比
        function screen() {
            if (typeof width !== "number" || width === 0) {
            width = $(window).width() * 0.8;
            }
            if (typeof height !== "number" || height === 0) {
            height = $(window).height() - 20;
            }
            return [width + "px", height + "px"];
        }
        $("#'.$val.'").on("click", function () {
            layer.open({
                type: 2,
                maxmin: true,
                title: "图库选择",
                shade: 0.1,
                area: screen(),
                content:"../index/optPhoto",
                success:function (layero,index) {
                    var iframe = window["layui-layer-iframe" + index];
                    iframe.child("'.$val.'")
                }
            });
        });
        })
        </script>';
    }
}
if (!function_exists('rm')) {
    //清除缓存
    function rm()
    {
        delete_dir(root_path().'runtime');
    }
}

if (!function_exists('is_url')){
    //是否
    function is_url($url)
    {
        if(preg_match("/^http(s)?:\\/\\/.+/",$url)) return $url;
    }
}

if (!function_exists('rand_string')) {
    /**
     *  随机数
     *
     * @param string $length 长度
     * @param string $type   类型
     * @return void
     */
    function rand_string($length = '32',$type=4): string
    {
        $rand='';
        switch ($type) {
            case '1':
                $randstr= '0123456789';
                break;
            case '2':
                $randstr= 'abcdefghijklmnopqrstuvwxyz';
                break;
            case '3':
                $randstr= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
                break;
            default:
                $randstr= '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
                break;
        }
        $max = strlen($randstr)-1;
        mt_srand((double)microtime()*1000000);
        for($i=0;$i<$length;$i++) {
            $rand.=$randstr[mt_rand(0,$max)];
        }
        return $rand;
    }
}

if (!function_exists('set_password')) {
    //密码截取
    function set_password($password): string
    {
      return substr(md5($password), 3, -3);
    }
}

/**
 * 数据签名认证
 */
function data_sign($data = [])
{
    if (!is_array($data)) {
        $data = (array)$data;
    }
    ksort($data);
    $code = http_build_query($data);
    $sign = sha1($code);
    return $sign;
}

/**
 * 修改网站配置文件
 */
if (!function_exists('set_web')) {
    function set_web($data = [])
    {
        $str = "<?php\r\n/**\r\n * 系统配置文件\r\n */\r\nreturn [\r\n";
        foreach ($data as $key => $value) {
            if(is_array($value)){
            $str .= getArrTree($key,$value);
            }else{
                $str .= "\t'$key' => '$value',";
                $str .= "\r\n";
            }
        }
        $str .= '];';
        @file_put_contents(config_path().'web.php', $str);
    }
}

if (!function_exists('get_arr_tree')) {
    /**
     * 递归配置数组
     */
    function get_arr_tree($key,$data,$level="\t")
    {
        $i = "$level'$key' => [\r\n";
        foreach ($data as $k => $v) {
            if(is_array($v)){
                $i .= get_arr_tree($k,$v,$level."\t");
            }else{
                $i .= "$level\t'$k' => '$v',";
                $i .= "\r\n";      
            }
        }
        return  $i."$level".'],'."\r\n";
    }
}

if (!function_exists('aes_encrypt')) {
    /**
     *
     * @param string $string 需要加密的字符串
     * @param string $key 密钥
     * @return string
     */
    function aes_encrypt($string, $key="ONSPEED"): string
    {
        $data = openssl_encrypt($string, 'AES-128-ECB', $key, OPENSSL_RAW_DATA);
        return strtolower(bin2hex($data));
    }
}

if (!function_exists('aes_decrypt')) {
    /**
     * @param string $string 需要解密的字符串
     * @param string $key 密钥
     * @return string
     */
    function aes_decrypt($string, $key="ONSPEED"): string
    {
        try {
            return openssl_decrypt(hex2bin($string), 'AES-128-ECB', $key, OPENSSL_RAW_DATA);
        }catch (\Exception $e){
            return false;
        }
    }
}

if (!function_exists('get_field')) {
    /**
     * 获取指定表指定行指定字段
     * @param  string       $tn      完整表名
     * @param  string|array $where   参数数组或者id值
     * @param  string       $field   字段名,默认'name'
     * @param  string       $default 获取失败的默认值,默认''
     * @param  array        $order   排序数组
     * @return string                获取到的内容
     */
    function get_field($tn, $where, $field = 'name', $default = '', $order = ['id' => 'desc'])
    {
        if (!is_array($where)) {
            $where = ['id' => $where];
        }
        $row = \think\facade\Db::name($tn)->field([$field])->where($where)->order($order)->find();
        return $row === null ? $default : $row[$field];
    }
  }

  if (!function_exists('delete_dir')) {
    /**
     * 遍历删除文件夹所有内容
     * @param  string $dir 要删除的文件夹
     */
    function delete_dir($dir)
    {
        $dh = opendir($dir);
        while ($file = readdir($dh)) {
            if ($file != '.' && $file != '..') {
                $filepath = $dir . '/' . $file;
                if (is_dir($filepath)) {
                    delete_dir($filepath);
                } else {
                    @unlink($filepath);
                }
            }
        }
        closedir($dh);
        @rmdir($dir);
    }
  }

  if (!function_exists('get_tree')) {
    /**
     * 递归无限级分类权限
     * @param array $data
     * @param int $pid
     * @param string $field1 父级字段
     * @param string $field2 子级关联的父级字段
     * @param string $field3 子级键值
     * @return mixed
     */
    function get_tree($data, $pid = 0, $field1 = 'id', $field2 = 'pid', $field3 = 'children')
    {
        $arr = [];
        foreach ($data as $k => $v) {
            if ($v[$field2] == $pid) {
                $v[$field3] = get_tree($data, $v[$field1]);
                $arr[] = $v;
            }
        }
        return $arr;
    }
  }

  if (!function_exists('hump_underline')) {
    /**
     * 驼峰转下划线
     * @param  string $str 需要转换的字符串
     * @return string      转换完毕的字符串
     */
    function hump_underline($str)
    {
        return strtolower(trim(preg_replace('/[A-Z]/', '_\\0', $str), '_'));
    }
 }

  if (!function_exists('underline_hump')) {
    /**
     * 下划线转驼峰
     * @param  string $str 需要转换的字符串
     * @return string      转换完毕的字符串
     */
    function underline_hump($str)
    {
        return ucfirst(
            preg_replace_callback('/_([a-zA-Z])/', function ($match) {
                return strtoupper($match[1]);
            }, $str)
        );
    }
  }

  if (!function_exists('record_log')){
    /**
     * @记录日志
     * @param [type] $param
     * @param string $file
     *
     * @return void
     */
     function record_log($param,$file=''){
        $path = root_path().'log/'.$file."/";
        if (!is_dir($path)) @mkdir($path,0777,true);
        if (is_array($param)){
            $param = json_encode($param,JSON_FORCE_OBJECT|JSON_UNESCAPED_UNICODE);
        }
        @file_put_contents(
            $path.date("Y_m_d",time()).".txt",
            "执行日期："."\r\n".date('Y-m-d H:i:s', time()) . ' ' . "\n" . $param . "\r\n",
            FILE_APPEND
        );
    }

}
